/**
 * 网络请求工具类
 */

// 获取全局server URL，确保使用全局配置
const getBaseUrl = () => {
  const app = getApp();
  return app ? app.globalData.serverUrl : 'https://v1.miaotongchefu.cn/v1';
};

// 标准请求方法（带Token验证）
const request = (url, method = 'GET', data = {}, showLoading = true) => {
  return new Promise((resolve, reject) => {
    if (showLoading) {
      // wx.showLoading({ title: '加载中...' });
    }

    // 获取全局应用实例
    const app = getApp();
    
    // 从全局或存储获取token
    const token = (app && app.globalData && app.globalData.token) || wx.getStorageSync('token') || '';
    
    // 获取baseUrl
    const baseUrl = getBaseUrl();
    
    // 设置合适的content-type
    const contentType = ['POST', 'PUT'].includes(method.toUpperCase()) ? 'application/json' : 'application/x-www-form-urlencoded';
    // 加入租户ID
    
    const tenantId =  wx.getStorageSync('tenant_id') || '1'

    // 调试日志
    // console.log(`【完整URL】${baseUrl + url}`);
    // console.log(`【数据】`, data);

    wx.request({
      url: baseUrl + url,
      method: method,
      data: data,
      header: {
        'content-type': contentType,
        'Authorization': token ? `Bearer ${token}` : '',
        'X-Tenant-ID':tenantId
      },
      success: (res) => {
        // console.log(`【响应数据】`, res.data);
        
        if (res.statusCode === 200) {
          // 请求成功
          resolve(res.data);
        } else if (res.statusCode === 401 || res.statusCode === 403) {
          // 认证失败或权限不足
          // console.error("【认证失败】", res.data);
          
          // 清除缓存中的token
          wx.removeStorageSync('token');
          if (app && app.globalData) {
            app.globalData.token = null;
            app.globalData.hasLogin = false;
          }
          
          // 自动重新登录
          setTimeout(() => {
            if (app && typeof app.userLogin === 'function') {
              console.log("【自动重新登录中...】");
              app.userLogin();
            } else {
              wx.showModal({
                title: '提示',
                content: '登录已过期，请重新登录',
                showCancel: false,
                success: () => {
                  wx.navigateTo({
                    url: '/pages/login/login'
                  });
                }
              });
            }
          }, 1000);
          
          reject(res.data);
        } else {
          // 其他错误
          const errorMsg = (res.data && res.data.msg) || `请求失败(${res.statusCode})`;
          wx.showToast({
            title: errorMsg,
            icon: 'none',
            duration: 2000
          });
          reject(res.data);
        }
      },
      fail: (err) => {
        console.error(`【请求失败】${url}`, err);
        wx.showToast({
          title: '网络连接错误',
          icon: 'none',
          duration: 2000
        });
        reject(err);
      },
      complete: () => {
        if (showLoading) {
          wx.hideLoading();
        }
      }
    });
  });
};

// 无需Token验证的请求方法（专用于激活码接口）
const requestNoAuth = (url, method = 'GET', data = {}, showLoading = true) => {
  return new Promise((resolve, reject) => {
    if (showLoading) {
      wx.showLoading({ title: '加载中...' });
    }
    
    // 获取baseUrl
    const baseUrl = getBaseUrl();
    
    // 设置合适的content-type
    const contentType = method.toUpperCase() === 'POST' ? 
      'application/json' : 'application/x-www-form-urlencoded';
    
    // 提供一个空的JWT令牌，避免后端报错"Missing Authorization Header"
    // 格式为: Bearer header.payload.signature
    const emptyToken = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikd1ZXN0IiwiaWF0IjoxNTE2MjM5MDIyfQ.gVyI7vO38JWFjPsOzOXJFPJ4Ydc1U5zJ2e_kMG3K-M0";
    
    // 调试日志
    // console.log(`【简化验证请求】${method} ${url}`);
    // console.log(`【完整URL】${baseUrl + url}`);
    // console.log(`【使用空令牌】`);
    // console.log(`【数据】`, data);

    wx.request({
      url: baseUrl + url,
      method: method,
      data: data,
      header: {
        'content-type': contentType,
        'Authorization': emptyToken // 提供空JWT令牌
      },
      success: (res) => {
        // console.log(`【响应状态】${res.statusCode}`);
        // console.log(`【响应数据】`, res.data);
        
        if (res.statusCode === 200) {
          // 请求成功
          resolve(res.data);
        } else if (res.statusCode === 401 || res.statusCode === 422) {
          // JWT验证失败，但我们仍然尝试解析响应
          console.log("【JWT验证失败，尝试返回数据】");
          if (res.data) {
            resolve(res.data);
          } else {
            reject({message: "JWT验证失败"});
          }
        } else {
          // 处理其他错误
          const errorMsg = (res.data && res.data.msg) || `请求失败(${res.statusCode})`;
          wx.showToast({
            title: errorMsg,
            icon: 'none',
            duration: 2000
          });
          reject(res.data);
        }
      },
      fail: (err) => {
        console.error(`【请求失败】${url}`, err);
        wx.showToast({
          title: '网络连接错误',
          icon: 'none',
          duration: 2000
        });
        reject(err);
      },
      complete: () => {
        if (showLoading) {
          wx.hideLoading();
        }
      }
    });
  });
};

module.exports = {
  request,
  requestNoAuth
}; 